package easy;

public class 类基础 {
    public static void main(String[] args) {
        //假设a和b想代表同一个学生，id都为1，name都为"jack"
        Student_v2 a=new Student_v2(1,"jack");
        Student_v2 b=new Student_v2(1,"jack");
        System.out.println(a==b);//==对类来说，调用的是指针是否相等
        System.out.println(a.equals(b));//调用的是万物基类object类的equals方法，因为没有重写，这里效果约等于==
        //只有byte,short,int,long,float,double,char，boolean这些基本数据类型可以用==直接判断相等
        int c=10;
        int d=10;
        System.out.println(c==d);
        //v3经过重写Equals和hashcode方法后，可以根据id和name判断两个对象是否相等
        Student_V3 e=new Student_V3(1,"jack");
        Student_V3 f=new Student_V3(1,"jack");
        System.out.println(e.equals(f));
    }
}
class Student_v2
{
    private int id;
    private String name;

    //自定义的构造函数，参数可以自定义，定义方法是 [访问级别][类名]([参数列表])
    //有自定义函数后，本身默认的无参的构造函数就不存在了,如果需要可以自己加
    public Student_v2(int id, String name)
    {
        this.id = id;
        this.name = name;
    }
    public Student_v2()
    {

    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
class Student_V3
{

    private int id;
    private String name;


    //此处是对Object类的equals方法进行重写，重写该方法往往也一定要重写hashCode方法，便于一些内置类的使用
    //在类内右键点生成（Generate）可以快速生成重写代码 快捷键 alt + insert
    //涉及到继承，后续会深入，现了解如何让自定义的类能按自己的需求判断相等
    @Override
    public boolean equals(Object o) {
        Student_V3 studentV3=(Student_V3) o;//显而易见的强制转换
        return id == studentV3.id && name.equals(studentV3.name);
    }

    @Override
    public int hashCode() {
        return id;
    }

    public Student_V3(int id, String name)
    {
        this.id = id;
        this.name = name;
    }
    public Student_V3()
    {

    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
